{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 0. Import Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%pip install pandas\n",
    "%pip install matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import tensorflow.keras as keras\n",
    "from tensorflow.keras import backend as K\n",
    "from tensorflow.keras.layers import *\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from scipy.io import loadmat\n",
    "from scipy.io import savemat\n",
    "import math\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import cm\n",
    "from matplotlib.ticker import LinearLocator\n",
    "\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy.random import seed\n",
    "seed(0)\n",
    "tf.random.set_seed(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Define a starfish domain"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rho_theta(theta):\n",
    "    return 1+0.5*np.cos(2.5*theta)**2\n",
    "    \n",
    "def rho_xy(x,y):\n",
    "    return rho_theta(np.angle(x+y*1j))\n",
    "\n",
    "def x_theta(theta):\n",
    "    return rho_theta(theta)*np.cos(theta)\n",
    "\n",
    "def y_theta(theta):\n",
    "    return rho_theta(theta)*np.sin(theta)\n",
    "\n",
    "def R(x,y):\n",
    "    return np.sqrt(x**2+y**2)\n",
    "\n",
    "def U(x,y):\n",
    "    return np.sin(0.5+x+k*x*y+k*y**2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Initialize the Grid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "delta = 0.05\n",
    "x_domain = np.arange(-1.4, 1.6, delta)\n",
    "y_domain = np.arange(-1.5, 1.5, delta)\n",
    "x_mesh,y_mesh = np.meshgrid(x_domain, y_domain)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. Define Physical Info."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    suppose: \n",
    "    x = x[0];\n",
    "    y = x[1];\n",
    "    uxy = x[2]; \n",
    "    dudx = x[3];\n",
    "    dudy = x[4];\n",
    "    du2dx2 = x[5];\n",
    "    du2dy2 = x[6];\n",
    "    du2dxdy = x[7];\n",
    "    laplace = x[8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "k=5\n",
    "governing_equation_components = []\n",
    "governing_equation_components.append(Lambda(lambda x: x[5]))\n",
    "governing_equation_components.append(Lambda(lambda x: 5*x[6]))\n",
    "governing_equation_components.append(Lambda(lambda x: k*tf.sin(x[2])*x[3]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "governing_equation_mask = R(x_mesh,y_mesh)<rho_xy(x_mesh,y_mesh)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "fx = governing_equation_mask*(-(1+2*k*y_mesh+k**2*(5*x_mesh**2+20*x_mesh*y_mesh+21*y_mesh**2))*np.sin(0.5+x_mesh+k*x_mesh*y_mesh+k*y_mesh**2)+k*np.cos(0.5+x_mesh+k*x_mesh*y_mesh+k*y_mesh**2)*(10+(1+k*y_mesh)*np.sin(np.sin(0.5+x_mesh+k*x_mesh*y_mesh+k*y_mesh**2))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "estimate_equation_form = False\n",
    "equation_component_combination = [1.0,1.0,1.0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. Define the Observations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    suppose: \n",
    "    x = x[0];\n",
    "    y = x[1];\n",
    "    uxy = x[2]; \n",
    "    dudx = x[3];\n",
    "    dudy = x[4];\n",
    "    du2dx2 = x[5];\n",
    "    du2dy2 = x[6];\n",
    "    du2dxdy = x[7];\n",
    "    laplace = x[8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "observation_components = []\n",
    "observation_components.append(Lambda(lambda x: x[2]))\n",
    "observation_components.append(Lambda(lambda x: x[3]))\n",
    "observation_components.append(Lambda(lambda x: x[4]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    format: [x,y,combination,value]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "observation_data = []\n",
    "\n",
    "theta_list = np.linspace(0,np.pi*2,800)\n",
    "for theta in theta_list:\n",
    "    x = x_theta(theta)\n",
    "    y = y_theta(theta)\n",
    "    comb = [1,0,0]\n",
    "    v = U(x,y)\n",
    "    observation_data.append([x,y,comb,v])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. Define PICN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_x_kernal_init(shape, dtype=tf.float32):\n",
    "    return tf.constant([[[[-1.0/delta]], [[1.0/delta]]]], dtype=dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_x2_kernal_init(shape, dtype=tf.float32):\n",
    "    return tf.constant([[[[1.0/delta**2]], [[-2.0/delta**2]], [[1.0/delta**2]]]], dtype=dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_y_kernal_init(shape, dtype=tf.float32):\n",
    "    return tf.constant([[[[-1.0/delta]]], [[[1.0/delta]]]], dtype=dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_y2_kernal_init(shape, dtype=tf.float32):\n",
    "    return tf.constant([[[[1.0/delta**2]]], [[[-2.0/delta**2]]], [[[1.0/delta**2]]]], dtype=dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_xy_kernal_init(shape, dtype=tf.float32):\n",
    "    return tf.constant([[[[1.0/delta**2]], [[-1.0/delta**2]]], [[[-1.0/delta**2]], [[1.0/delta**2]]]], dtype=dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def laplace_kernal_init(shape, dtype=tf.float32):\n",
    "    return tf.constant([[[[0]], [[1.0/delta**2]], [[0]]], [[[1.0/delta**2]], [[-4.0/delta**2]], [[1.0/delta**2]]], [[[0]], [[1.0/delta**2]], [[0]]]], dtype=dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "inputs = [keras.layers.Input(shape=(1,1,1)),\n",
    "          keras.layers.Input(shape=(len(y_domain),len(x_domain),1)),\n",
    "          keras.layers.Input(shape=(len(y_domain),len(x_domain),1)),\n",
    "          keras.layers.Input(shape=(len(observation_data),len(observation_components)*4)),\n",
    "          keras.layers.Input(shape=(len(y_domain),len(x_domain),1))]\n",
    "\n",
    "hidden_field = keras.layers.Conv2DTranspose(filters=1, \n",
    "                                            kernel_size=[len(y_domain)+4,len(x_domain)+4], \n",
    "                                            activation='linear')(inputs[0])\n",
    "coordinates_x = inputs[1]\n",
    "coordinates_y = inputs[2]\n",
    "field = keras.layers.Conv2D(filters=1, \n",
    "                            kernel_size=3, \n",
    "                            padding='valid', \n",
    "                            activation=Lambda(lambda x: x+tf.tanh(x)))(hidden_field)\n",
    "gradient_x_field = keras.layers.Conv2D(filters=1, \n",
    "                                     kernel_size=[1,2], \n",
    "                                     padding='valid',\n",
    "                                     use_bias=False,\n",
    "                                     trainable=False,\n",
    "                                     kernel_initializer=gradient_x_kernal_init)(field)\n",
    "gradient_x2_field = keras.layers.Conv2D(filters=1, \n",
    "                                       kernel_size=[1,3], \n",
    "                                       padding='valid',\n",
    "                                       use_bias=False,\n",
    "                                       trainable=False,\n",
    "                                       kernel_initializer=gradient_x2_kernal_init)(field)\n",
    "gradient_y_field = keras.layers.Conv2D(filters=1, \n",
    "                                     kernel_size=[2,1], \n",
    "                                     padding='valid',\n",
    "                                     use_bias=False,\n",
    "                                     trainable=False,\n",
    "                                     kernel_initializer=gradient_y_kernal_init)(field)\n",
    "gradient_y2_field = keras.layers.Conv2D(filters=1, \n",
    "                                       kernel_size=[3,1], \n",
    "                                       padding='valid',\n",
    "                                       use_bias=False,\n",
    "                                       trainable=False,\n",
    "                                       kernel_initializer=gradient_y2_kernal_init)(field)\n",
    "gradient_xy_field = keras.layers.Conv2D(filters=1, \n",
    "                                       kernel_size=[2,2], \n",
    "                                       padding='valid',\n",
    "                                       use_bias=False,\n",
    "                                       trainable=False,\n",
    "                                       kernel_initializer=gradient_xy_kernal_init)(field)\n",
    "laplace_field = keras.layers.Conv2D(filters=1, \n",
    "                                       kernel_size=[3,3], \n",
    "                                       padding='valid',\n",
    "                                       use_bias=False,\n",
    "                                       trainable=False,\n",
    "                                       kernel_initializer=laplace_kernal_init)(field)\n",
    "phycial_fields = [coordinates_x,\n",
    "                  coordinates_y,\n",
    "                  field[:,1:-1,1:-1,:],\n",
    "                  gradient_x_field[:,1:-1,1:,:],\n",
    "                  gradient_y_field[:,1:,1:-1,:],\n",
    "                  gradient_x2_field[:,1:-1,:,:],\n",
    "                  gradient_y2_field[:,:,1:-1,:],\n",
    "                  gradient_xy_field[:,1:,1:,:],\n",
    "                  laplace_field]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "if estimate_equation_form==True:\n",
    "    tf_governing_equation_components = [component(phycial_fields) for component in governing_equation_components]\n",
    "    concat_equation_components = Lambda(lambda x: tf.concat(x,axis=-1))(tf_governing_equation_components)\n",
    "    governing_equation = keras.layers.Conv2D(filters=1, \n",
    "                                             kernel_size=[1,1], \n",
    "                                             padding='valid',\n",
    "                                             use_bias=False)(concat_equation_components)*inputs[4]\n",
    "else:\n",
    "    tf_weighted_governing_equation_components = [weight*component(phycial_fields) for [weight,component] in zip(equation_component_combination,governing_equation_components)]\n",
    "    concat_weighted_equation_components = Lambda(lambda x: tf.concat(x,axis=-1))(tf_weighted_governing_equation_components)\n",
    "    governing_equation = Lambda(lambda x: tf.reduce_sum(x,axis=-1,keepdims=True))(concat_weighted_equation_components)*inputs[4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf_observation_components = [component(phycial_fields) for component in observation_components]\n",
    "concat_observation_components = Lambda(lambda x: tf.concat(x,axis=-1))(tf_observation_components)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "left_x_position_index_list = []\n",
    "right_x_position_index_list = []\n",
    "left_x_position_weight_list = []\n",
    "right_x_position_weight_list = []\n",
    "\n",
    "bottom_y_position_index_list = []\n",
    "top_y_position_index_list = []\n",
    "bottom_y_position_weight_list = []\n",
    "top_y_position_weight_list = []\n",
    "\n",
    "\n",
    "for data in observation_data:\n",
    "    \n",
    "    left_x_position_index = int(np.floor((data[0] - x_domain[0])/delta))\n",
    "    right_x_position_index = left_x_position_index + 1\n",
    "    left_x_position_weight = 1-(data[0] - (x_domain[0]+delta*left_x_position_index))/delta\n",
    "    right_x_position_weight = 1-left_x_position_weight\n",
    "    \n",
    "    bottom_y_position_index = int(np.floor((data[1] - y_domain[0])/delta))\n",
    "    top_y_position_index = bottom_y_position_index + 1\n",
    "    bottom_y_position_weight = 1-(data[1] - (y_domain[0]+delta*bottom_y_position_index))/delta\n",
    "    top_y_position_weight = 1-bottom_y_position_weight\n",
    "    \n",
    "    if data[0] <= x_domain[0] + 1e-8:\n",
    "        left_x_position_index = 0\n",
    "        right_x_position_index = 1\n",
    "        left_x_position_weight = 1\n",
    "        right_x_position_weight = 0\n",
    "    if data[0] >= x_domain[-1] - 1e-8:\n",
    "        left_x_position_index = len(x_domain)-2\n",
    "        right_x_position_index = len(x_domain)-1\n",
    "        left_x_position_weight = 0\n",
    "        right_x_position_weight = 1\n",
    "    if data[1] <= y_domain[0] + 1e-8:\n",
    "        bottom_y_position_index = 0\n",
    "        top_y_position_index = 1\n",
    "        bottom_y_position_weight = 1\n",
    "        top_y_position_weight = 0\n",
    "    if data[1] >= y_domain[-1] - 1e-8:\n",
    "        bottom_y_position_index = len(y_domain)-2\n",
    "        top_y_position_index = len(y_domain)-1\n",
    "        bottom_y_position_weight = 0\n",
    "        top_y_position_weight = 1\n",
    "    \n",
    "    left_x_position_index_list.append(left_x_position_index)\n",
    "    right_x_position_index_list.append(right_x_position_index)\n",
    "    left_x_position_weight_list.append(left_x_position_weight)\n",
    "    right_x_position_weight_list.append(right_x_position_weight)\n",
    "\n",
    "    bottom_y_position_index_list.append(bottom_y_position_index)\n",
    "    top_y_position_index_list.append(top_y_position_index)\n",
    "    bottom_y_position_weight_list.append(bottom_y_position_weight)\n",
    "    top_y_position_weight_list.append(top_y_position_weight)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "left_bottom_indices = tf.constant([[0,y,x] for x,y in zip(left_x_position_index_list,bottom_y_position_index_list)])\n",
    "left_top_indices = tf.constant([[0,y,x] for x,y in zip(left_x_position_index_list,top_y_position_index_list)])\n",
    "right_bottom_indices = tf.constant([[0,y,x] for x,y in zip(right_x_position_index_list,bottom_y_position_index_list)])\n",
    "right_top_indices = tf.constant([[0,y,x] for x,y in zip(right_x_position_index_list,top_y_position_index_list)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "observation_data_left_bottom_part = Lambda(lambda x: tf.gather_nd(x,left_bottom_indices))(concat_observation_components)\n",
    "observation_data_left_top_part = Lambda(lambda x: tf.gather_nd(x,left_top_indices))(concat_observation_components)\n",
    "observation_data_right_bottom_part = Lambda(lambda x: tf.gather_nd(x,right_bottom_indices))(concat_observation_components)\n",
    "observation_data_right_top_part = Lambda(lambda x: tf.gather_nd(x,right_top_indices))(concat_observation_components)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "observation_data_four_part = Lambda(lambda x: tf.expand_dims(tf.concat(x,axis=-1),axis=0))([observation_data_left_bottom_part,observation_data_left_top_part,observation_data_right_bottom_part,observation_data_right_top_part])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "observation_data_interpolation_weights = np.expand_dims(\n",
    "np.asarray([np.concatenate([(np.asarray([observation_data[i][2][j] for j in range(len(observation_components))]))*left_x_position_weight_list[i]*bottom_y_position_weight_list[i],\n",
    " (np.asarray([observation_data[i][2][j] for j in range(len(observation_components))]))*left_x_position_weight_list[i]*top_y_position_weight_list[i],\n",
    " (np.asarray([observation_data[i][2][j] for j in range(len(observation_components))]))*right_x_position_weight_list[i]*bottom_y_position_weight_list[i],\n",
    " (np.asarray([observation_data[i][2][j] for j in range(len(observation_components))]))*right_x_position_weight_list[i]*top_y_position_weight_list[i]],axis=-1) for i in range(len(observation_data))]),\n",
    "    axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "observations = Lambda(lambda x: tf.reduce_sum(x[0]*x[1],axis=-1))([inputs[3][0,:,:],observation_data_four_part])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "pde_model = keras.Model(inputs=inputs[:3], outputs=phycial_fields)\n",
    "pde_model_train = keras.Model(inputs=inputs, outputs=[governing_equation,observations])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "__________________________________________________________________________________________________\n",
      " Layer (type)                Output Shape                 Param #   Connected to                  \n",
      "==================================================================================================\n",
      " input_1 (InputLayer)        [(None, 1, 1, 1)]            0         []                            \n",
      "                                                                                                  \n",
      " conv2d_transpose (Conv2DTr  (None, 64, 64, 1)            4097      ['input_1[0][0]']             \n",
      " anspose)                                                                                         \n",
      "                                                                                                  \n",
      " conv2d (Conv2D)             (None, 62, 62, 1)            10        ['conv2d_transpose[0][0]']    \n",
      "                                                                                                  \n",
      " conv2d_1 (Conv2D)           (None, 62, 61, 1)            2         ['conv2d[0][0]']              \n",
      "                                                                                                  \n",
      " conv2d_3 (Conv2D)           (None, 61, 62, 1)            2         ['conv2d[0][0]']              \n",
      "                                                                                                  \n",
      " conv2d_2 (Conv2D)           (None, 62, 60, 1)            3         ['conv2d[0][0]']              \n",
      "                                                                                                  \n",
      " conv2d_4 (Conv2D)           (None, 60, 62, 1)            3         ['conv2d[0][0]']              \n",
      "                                                                                                  \n",
      " conv2d_5 (Conv2D)           (None, 61, 61, 1)            4         ['conv2d[0][0]']              \n",
      "                                                                                                  \n",
      " input_2 (InputLayer)        [(None, 60, 60, 1)]          0         []                            \n",
      "                                                                                                  \n",
      " input_3 (InputLayer)        [(None, 60, 60, 1)]          0         []                            \n",
      "                                                                                                  \n",
      " tf.__operators__.getitem (  (None, 60, 60, 1)            0         ['conv2d[0][0]']              \n",
      " SlicingOpLambda)                                                                                 \n",
      "                                                                                                  \n",
      " tf.__operators__.getitem_1  (None, 60, 60, 1)            0         ['conv2d_1[0][0]']            \n",
      "  (SlicingOpLambda)                                                                               \n",
      "                                                                                                  \n",
      " tf.__operators__.getitem_2  (None, 60, 60, 1)            0         ['conv2d_3[0][0]']            \n",
      "  (SlicingOpLambda)                                                                               \n",
      "                                                                                                  \n",
      " tf.__operators__.getitem_3  (None, 60, 60, 1)            0         ['conv2d_2[0][0]']            \n",
      "  (SlicingOpLambda)                                                                               \n",
      "                                                                                                  \n",
      " tf.__operators__.getitem_4  (None, 60, 60, 1)            0         ['conv2d_4[0][0]']            \n",
      "  (SlicingOpLambda)                                                                               \n",
      "                                                                                                  \n",
      " tf.__operators__.getitem_5  (None, 60, 60, 1)            0         ['conv2d_5[0][0]']            \n",
      "  (SlicingOpLambda)                                                                               \n",
      "                                                                                                  \n",
      " conv2d_6 (Conv2D)           (None, 60, 60, 1)            9         ['conv2d[0][0]']              \n",
      "                                                                                                  \n",
      "==================================================================================================\n",
      "Total params: 4130 (16.13 KB)\n",
      "Trainable params: 4107 (16.04 KB)\n",
      "Non-trainable params: 23 (92.00 Byte)\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "def model_print_functoin(s):\n",
    "    with open('model_summary.txt','a') as f:\n",
    "        print(s, file=f)\n",
    "\n",
    "pde_model.summary(print_fn=model_print_functoin)\n",
    "pde_model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. Prepare the Training Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 1, 1, 1)\n"
     ]
    }
   ],
   "source": [
    "unit_constant = np.asarray([[[[1.0]]]],dtype=np.float32)\n",
    "training_input_data_0 = unit_constant\n",
    "print(training_input_data_0.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 60, 60, 1)\n"
     ]
    }
   ],
   "source": [
    "training_input_data_1 = np.expand_dims(x_mesh.astype(np.float32),axis=[0,-1])\n",
    "print(training_input_data_1.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 60, 60, 1)\n"
     ]
    }
   ],
   "source": [
    "training_input_data_2 = np.expand_dims(y_mesh.astype(np.float32),axis=[0,-1])\n",
    "print(training_input_data_2.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 800, 12)\n"
     ]
    }
   ],
   "source": [
    "training_input_data_3 = observation_data_interpolation_weights.astype(np.float32)\n",
    "print(training_input_data_3.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 60, 60, 1)\n"
     ]
    }
   ],
   "source": [
    "training_input_data_4 = np.expand_dims(governing_equation_mask.astype(np.float32),axis=[0,-1])\n",
    "print(training_input_data_2.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 60, 60, 1)\n"
     ]
    }
   ],
   "source": [
    "training_label_data_0 = np.expand_dims(fx.astype(np.float32),axis=[0,-1])\n",
    "print(training_label_data_0.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 800)\n"
     ]
    }
   ],
   "source": [
    "training_label_data_1 = np.expand_dims(np.asarray([data[3] for data in observation_data]),axis=[0])\n",
    "print(training_label_data_1.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "training_input_data = [training_input_data_0,training_input_data_1,training_input_data_2,training_input_data_3,training_input_data_4]\n",
    "training_label_data = [training_label_data_0,training_label_data_1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7. Train the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['loss', 'tf.math.multiply_3_loss', 'lambda_15_loss']\n"
     ]
    }
   ],
   "source": [
    "pde_model_train.compile(optimizer=keras.optimizers.Adam(), loss=\"mse\")\n",
    "pde_model_train.save_weights('picn_initial_weights.h5')\n",
    "temp_history = pde_model_train.fit(x=training_input_data, y=training_label_data, epochs=1, verbose=0)\n",
    "history_keys = []\n",
    "for key in temp_history.history.keys():\n",
    "    history_keys.append(key)\n",
    "print(history_keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def record_predictions():\n",
    "    [_, _, uxy, dudx, dudy, d2udx2, d2udy2, d2udxdy, laplace] = pde_model.predict(training_input_data[:3])\n",
    "    uxy_list.append(uxy[:,:,:,0])\n",
    "    dudx_list.append(dudx[:,:,:,0])\n",
    "    dudy_list.append(dudy[:,:,:,0])\n",
    "    d2udx2_list.append(d2udx2[:,:,:,0])\n",
    "    d2udy2_list.append(d2udy2[:,:,:,0])\n",
    "    d2udxdy_list.append(d2udxdy[:,:,:,0])\n",
    "    laplace_list.append(laplace[:,:,:,0])\n",
    "\n",
    "class Per_X_Epoch_Record(tf.keras.callbacks.Callback):\n",
    "    def __init__(self, record_interval, verbose=1):\n",
    "        super(tf.keras.callbacks.Callback, self).__init__()\n",
    "        self.total_loss = history_keys[0]\n",
    "        self.domain_loss = history_keys[1]\n",
    "        self.bdc_loss = history_keys[2]\n",
    "        self.previous_total_loss = 9999999\n",
    "        self.record_interval = record_interval\n",
    "        self.verbose = verbose\n",
    "\n",
    "    def on_epoch_end(self, epoch, logs={}):\n",
    "        \n",
    "        if epoch%self.record_interval == 0:\n",
    "            \n",
    "            current_total_loss = logs.get(self.total_loss)\n",
    "            current_domain_loss = logs.get(self.domain_loss)\n",
    "            current_bdc_loss = logs.get(self.bdc_loss)\n",
    "            \n",
    "            epoch_number_list.append(epoch)\n",
    "            total_loss_list.append(current_total_loss)\n",
    "            domain_loss_list.append(current_domain_loss)\n",
    "            boundary_loss_list.append(current_bdc_loss)\n",
    "        \n",
    "            if current_total_loss < self.previous_total_loss:\n",
    "                self.previous_total_loss = current_total_loss\n",
    "                pde_model_train.save_weights('picn_best_weights.h5')\n",
    "            \n",
    "            if self.verbose > 0:\n",
    "                print(\"epoch: {:10.5f} | total_loss: {:10.5f} | domain_loss: {:10.5f} | bdc_loss: {:10.5f}\".format(epoch,current_total_loss,current_domain_loss,current_bdc_loss))\n",
    "        \n",
    "            # evaluate the errors in f-domain\n",
    "            record_predictions()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "callbacks = [\n",
    "    Per_X_Epoch_Record(record_interval=500,verbose=1),\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch:    0.00000 | total_loss:  609.62195 | domain_loss: 60914.48828 | bdc_loss:    0.48188\n",
      "1/1 [==============================] - 0s 62ms/step\n",
      "epoch:  500.00000 | total_loss:  280.80710 | domain_loss: 28033.32031 | bdc_loss:    0.47871\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 1000.00000 | total_loss:  154.72769 | domain_loss: 15424.98926 | bdc_loss:    0.48263\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 1500.00000 | total_loss:   82.13910 | domain_loss: 8165.96777 | bdc_loss:    0.48426\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 2000.00000 | total_loss:   43.18217 | domain_loss: 4270.83545 | bdc_loss:    0.47860\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 2500.00000 | total_loss:   22.43317 | domain_loss: 2197.12036 | bdc_loss:    0.46663\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 3000.00000 | total_loss:   11.62665 | domain_loss: 1117.82593 | bdc_loss:    0.45292\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 3500.00000 | total_loss:    6.37636 | domain_loss:  594.00037 | bdc_loss:    0.44077\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 4000.00000 | total_loss:    3.85963 | domain_loss:  343.29388 | bdc_loss:    0.43100\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 4500.00000 | total_loss:    2.52986 | domain_loss:  211.30420 | bdc_loss:    0.42102\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 5000.00000 | total_loss:    1.74607 | domain_loss:  134.23581 | bdc_loss:    0.40779\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 5500.00000 | total_loss:    1.25828 | domain_loss:   87.15655 | bdc_loss:    0.39062\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 6000.00000 | total_loss:    0.94453 | domain_loss:   57.84951 | bdc_loss:    0.36973\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 6500.00000 | total_loss:    0.73185 | domain_loss:   39.00835 | bdc_loss:    0.34522\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 7000.00000 | total_loss:    0.57719 | domain_loss:   26.30082 | bdc_loss:    0.31736\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 7500.00000 | total_loss:    0.45878 | domain_loss:   17.50092 | bdc_loss:    0.28664\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 8000.00000 | total_loss:    0.36646 | domain_loss:   11.53842 | bdc_loss:    0.25361\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 8500.00000 | total_loss:    0.29397 | domain_loss:    7.72432 | bdc_loss:    0.21892\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 9000.00000 | total_loss:    0.23576 | domain_loss:    5.41360 | bdc_loss:    0.18346\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 9500.00000 | total_loss:    0.18714 | domain_loss:    4.01143 | bdc_loss:    0.14851\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 10000.00000 | total_loss:    0.14533 | domain_loss:    3.07759 | bdc_loss:    0.11571\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 10500.00000 | total_loss:    0.10953 | domain_loss:    2.37557 | bdc_loss:    0.08664\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 11000.00000 | total_loss:    0.07983 | domain_loss:    1.79928 | bdc_loss:    0.06246\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 11500.00000 | total_loss:    0.05634 | domain_loss:    1.32141 | bdc_loss:    0.04357\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 12000.00000 | total_loss:    0.03869 | domain_loss:    0.93423 | bdc_loss:    0.02965\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 12500.00000 | total_loss:    0.02607 | domain_loss:    0.63264 | bdc_loss:    0.01994\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 13000.00000 | total_loss:    0.01745 | domain_loss:    0.41749 | bdc_loss:    0.01341\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 13500.00000 | total_loss:    0.01171 | domain_loss:    0.27188 | bdc_loss:    0.00908\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 14000.00000 | total_loss:    0.00811 | domain_loss:    0.19228 | bdc_loss:    0.00625\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 14500.00000 | total_loss:    0.00552 | domain_loss:    0.11557 | bdc_loss:    0.00441\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 15000.00000 | total_loss:    0.00394 | domain_loss:    0.07746 | bdc_loss:    0.00319\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 15500.00000 | total_loss:    0.00289 | domain_loss:    0.05312 | bdc_loss:    0.00239\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 16000.00000 | total_loss:    0.00220 | domain_loss:    0.03832 | bdc_loss:    0.00184\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 16500.00000 | total_loss:    0.00172 | domain_loss:    0.02691 | bdc_loss:    0.00146\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 17000.00000 | total_loss:    0.00138 | domain_loss:    0.01984 | bdc_loss:    0.00119\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 17500.00000 | total_loss:    0.00114 | domain_loss:    0.01549 | bdc_loss:    0.00099\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 18000.00000 | total_loss:    0.00096 | domain_loss:    0.01242 | bdc_loss:    0.00084\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 18500.00000 | total_loss:    0.00087 | domain_loss:    0.01555 | bdc_loss:    0.00072\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 19000.00000 | total_loss:    0.00068 | domain_loss:    0.00651 | bdc_loss:    0.00062\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 19500.00000 | total_loss:    0.00060 | domain_loss:    0.00670 | bdc_loss:    0.00054\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 20000.00000 | total_loss:    0.00053 | domain_loss:    0.00575 | bdc_loss:    0.00048\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 20500.00000 | total_loss:    0.00045 | domain_loss:    0.00324 | bdc_loss:    0.00042\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 21000.00000 | total_loss:    0.00040 | domain_loss:    0.00285 | bdc_loss:    0.00038\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 21500.00000 | total_loss:    0.00035 | domain_loss:    0.00228 | bdc_loss:    0.00034\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 22000.00000 | total_loss:    0.00034 | domain_loss:    0.00392 | bdc_loss:    0.00030\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 22500.00000 | total_loss:    0.00029 | domain_loss:    0.00189 | bdc_loss:    0.00027\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 23000.00000 | total_loss:    0.00025 | domain_loss:    0.00110 | bdc_loss:    0.00025\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 23500.00000 | total_loss:    0.00029 | domain_loss:    0.00711 | bdc_loss:    0.00022\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 24000.00000 | total_loss:    0.00026 | domain_loss:    0.00606 | bdc_loss:    0.00020\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 24500.00000 | total_loss:    0.00028 | domain_loss:    0.00954 | bdc_loss:    0.00019\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 25000.00000 | total_loss:    0.00018 | domain_loss:    0.00124 | bdc_loss:    0.00017\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 25500.00000 | total_loss:    0.00019 | domain_loss:    0.00304 | bdc_loss:    0.00016\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 26000.00000 | total_loss:    0.00018 | domain_loss:    0.00301 | bdc_loss:    0.00015\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 26500.00000 | total_loss:    0.00014 | domain_loss:    0.00078 | bdc_loss:    0.00014\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 27000.00000 | total_loss:    0.00013 | domain_loss:    0.00034 | bdc_loss:    0.00013\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 27500.00000 | total_loss:    0.00013 | domain_loss:    0.00112 | bdc_loss:    0.00012\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 28000.00000 | total_loss:    0.00011 | domain_loss:    0.00026 | bdc_loss:    0.00011\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 28500.00000 | total_loss:    0.00011 | domain_loss:    0.00042 | bdc_loss:    0.00011\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 29000.00000 | total_loss:    0.00013 | domain_loss:    0.00310 | bdc_loss:    0.00010\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 29500.00000 | total_loss:    0.00013 | domain_loss:    0.00376 | bdc_loss:    0.00010\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 30000.00000 | total_loss:    0.00009 | domain_loss:    0.00013 | bdc_loss:    0.00009\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 30500.00000 | total_loss:    0.00010 | domain_loss:    0.00124 | bdc_loss:    0.00009\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 31000.00000 | total_loss:    0.00010 | domain_loss:    0.00115 | bdc_loss:    0.00008\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 31500.00000 | total_loss:    0.00009 | domain_loss:    0.00053 | bdc_loss:    0.00008\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 32000.00000 | total_loss:    0.00009 | domain_loss:    0.00076 | bdc_loss:    0.00008\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 32500.00000 | total_loss:    0.00030 | domain_loss:    0.02225 | bdc_loss:    0.00008\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 33000.00000 | total_loss:    0.00012 | domain_loss:    0.00497 | bdc_loss:    0.00007\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 33500.00000 | total_loss:    0.00009 | domain_loss:    0.00238 | bdc_loss:    0.00007\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 34000.00000 | total_loss:    0.00007 | domain_loss:    0.00042 | bdc_loss:    0.00007\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 34500.00000 | total_loss:    0.00007 | domain_loss:    0.00011 | bdc_loss:    0.00007\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 35000.00000 | total_loss:    0.00008 | domain_loss:    0.00102 | bdc_loss:    0.00007\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 35500.00000 | total_loss:    0.00006 | domain_loss:    0.00005 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 36000.00000 | total_loss:    0.00006 | domain_loss:    0.00004 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 36500.00000 | total_loss:    0.00007 | domain_loss:    0.00064 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 37000.00000 | total_loss:    0.00009 | domain_loss:    0.00275 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 37500.00000 | total_loss:    0.00012 | domain_loss:    0.00634 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 38000.00000 | total_loss:    0.00006 | domain_loss:    0.00004 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 38500.00000 | total_loss:    0.00008 | domain_loss:    0.00229 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 39000.00000 | total_loss:    0.00006 | domain_loss:    0.00010 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 39500.00000 | total_loss:    0.00007 | domain_loss:    0.00186 | bdc_loss:    0.00006\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 40000.00000 | total_loss:    0.00005 | domain_loss:    0.00007 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 40500.00000 | total_loss:    0.00006 | domain_loss:    0.00085 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 41000.00000 | total_loss:    0.00012 | domain_loss:    0.00628 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 41500.00000 | total_loss:    0.00009 | domain_loss:    0.00364 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 42000.00000 | total_loss:    0.00007 | domain_loss:    0.00195 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 42500.00000 | total_loss:    0.00006 | domain_loss:    0.00059 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 43000.00000 | total_loss:    0.00006 | domain_loss:    0.00056 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 43500.00000 | total_loss:    0.00009 | domain_loss:    0.00424 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 44000.00000 | total_loss:    0.00005 | domain_loss:    0.00035 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 44500.00000 | total_loss:    0.00007 | domain_loss:    0.00216 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 45000.00000 | total_loss:    0.00015 | domain_loss:    0.01037 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 45500.00000 | total_loss:    0.00009 | domain_loss:    0.00462 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 46000.00000 | total_loss:    0.00005 | domain_loss:    0.00002 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 12ms/step\n",
      "epoch: 46500.00000 | total_loss:    0.00006 | domain_loss:    0.00135 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 47000.00000 | total_loss:    0.00005 | domain_loss:    0.00071 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 47500.00000 | total_loss:    0.00005 | domain_loss:    0.00057 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "epoch: 48000.00000 | total_loss:    0.00005 | domain_loss:    0.00003 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 48500.00000 | total_loss:    0.00014 | domain_loss:    0.00945 | bdc_loss:    0.00005\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 49000.00000 | total_loss:    0.00004 | domain_loss:    0.00001 | bdc_loss:    0.00004\n",
      "1/1 [==============================] - 0s 10ms/step\n",
      "epoch: 49500.00000 | total_loss:    0.00011 | domain_loss:    0.00613 | bdc_loss:    0.00004\n",
      "1/1 [==============================] - 0s 11ms/step\n",
      "Training time cost:  117.62369 seconds\n"
     ]
    }
   ],
   "source": [
    "epoch_number_list = []\n",
    "total_loss_list = []\n",
    "domain_loss_list = []\n",
    "boundary_loss_list = []\n",
    "uxy_list = []\n",
    "dudx_list = []\n",
    "dudy_list = []\n",
    "d2udx2_list = []\n",
    "d2udy2_list = []\n",
    "d2udxdy_list = []\n",
    "laplace_list = []\n",
    "pde_model_train.load_weights('picn_initial_weights.h5')\n",
    "pde_model_train.compile(optimizer=keras.optimizers.Adam(learning_rate=0.0001), loss=\"mse\", loss_weights = [0.01, 0.99])\n",
    "\n",
    "# Record the training time cost\n",
    "start = time.time()\n",
    "\n",
    "# Training\n",
    "pde_model_train.fit(x=training_input_data, \n",
    "                    y=training_label_data, \n",
    "                    epochs=50000, verbose=0,\n",
    "                    callbacks=callbacks)\n",
    "\n",
    "# Record the training time cost\n",
    "end = time.time()\n",
    "print(\"Training time cost: {:10.5f} seconds\".format(end - start))\n",
    "time_costs_text_file = open(\"time_costs.txt\", \"w\")\n",
    "time_costs_text_file.write(\"Training time cost: {:10.5f} seconds\".format(end - start))\n",
    "time_costs_text_file.close()\n",
    "\n",
    "# Load the best weights\n",
    "pde_model_train.load_weights('picn_best_weights.h5')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 8. LOSS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df=pd.DataFrame({'epoch': epoch_number_list, \n",
    "                 'total_loss': total_loss_list, \n",
    "                 'governing_loss': domain_loss_list, \n",
    "                 'boundary_loss': boundary_loss_list})\n",
    "\n",
    "plt.figure(figsize=(12, 4))\n",
    "plt.plot( 'epoch', 'total_loss', data=df, marker='o', markerfacecolor='red', markersize=2, color='skyblue', linewidth=3)\n",
    "plt.plot( 'epoch', 'governing_loss', data=df, marker='', color='green', linewidth=2, linestyle='dashed')\n",
    "plt.plot( 'epoch', 'boundary_loss', data=df, marker='', color='blue', linewidth=2, linestyle='dashed')\n",
    "plt.legend()\n",
    "#plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1/1 [==============================] - 0s 11ms/step\n"
     ]
    }
   ],
   "source": [
    "[x_m, y_m, uxy, dudx, dudy, d2udx2, d2udy2, d2udxdy, laplace] = pde_model.predict(training_input_data[:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9. Results overview"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'y')"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKcAAAEmCAYAAAC3VPOnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACay0lEQVR4nO3de1xUdf4/8BeggKaAJjKQKF5asFJR+Ym4fUuDBHVbLbu57mp+vWymldJFLW9pRZapXWzdVku7uJZ+W3fXWoswt2/JUmls5SqbpuINtFxALQHl/P7we8aZ4cyZc86c68zr+XjMoxjOzJwBeZ/5vM778zkRgiAIICIiIiIiIiIiskCk1TtAREREREREREThi+EUERERERERERFZhuEUERERERERERFZhuEUERERERERERFZhuEUERERERERERFZhuEUERERERERERFZhuEUERERERERERFZhuEUERERERERERFZpoXVO2B3TU1NOHbsGNq2bYuIiAird4eITCIIAk6fPo2UlBRERjLHDzes/UThibU/vLH2E4Un1n57YDgVwLFjx5Cammr1bhCRRQ4fPoxOnTpZvRtkMtZ+ovDG2h+eWPuJwhtrv7UYTgXQtm1bABf/ocbFxVm8N0Rklrq6OqSmprprAIUX1n6i8MTaH95Y+4nCE2u/PTCcCkBs6Y2Li+NBiigMsa0/PLH2E4U31v7wxNpPFN5Y+63FcIrIIOmLl7v/v75zg/v/0zqd9NruRtder69vjdsV+LlTjwW5d0REZAQltd+z7iup+e7nZu0nIrIlf7Xfk+8YAJA/Hmyq6wcAePTqLXrsIpHtcbUvIgNkTVqGtocE99cxldHu/z94JNFr2+KqDK+vxQORnIrDKUHuIRER6U1p7fes+0pqvoi1n4jIfjyDKcC79nvyHQP42lTXz+smemL3L4LfSSIHiBAEQQi8Wfiqq6tDfHw8amtr2d5LimRNWtbsvtNdLrWIqumiAuTPqvMsunH4tx/e+PsntXKHFKG2e4zXfUpqP7tn7YV/++GNv39SS/zc71nvfUl1UikZA/hiB5Vx+LdvDwynAuA/VFIjd0iR19dKByqA/GBFJDVo4SDFGPzbD2/8/ZMavrUf8K7/RoRUrP3G4N9+eOPvn5SSOiEhUhNUKfn874kBlTH4t28PnNZHpMEw1z2St+g9h722i99f774B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AMKyZcuEL7/8Ujh06JAgCIIwe/Zs4Te/+Y17+++++05o3bq18NBDDwl79uwRVq5cKURFRQlbt2613b4uX75c2Lx5s/Dtt98KX3/9tXD//fcLkZGRwocffmj4vhI5qfbbte4LAmu/UVj7iYzB2q8P1n5jsPaTGRhO2dj48eMFAM1uH330kXsbAMKrr77q/rqpqUmYN2+ekJSUJMTExAi5ublCRUWFKfv7ww8/CGPGjBHatGkjxMXFCRMmTPA6oB44cMBr/ysrK4XrrrtOaN++vRATEyP06NFDeOihh4Ta2lrd9+2FF14QOnfuLERHRwsDBgwQ/vGPf7i/d/311wvjx4/32v7tt98WfvaznwnR0dHC1VdfLbz77ru675Me+zpjxgz3tklJScLw4cOFXbt2mbKf4mVXfW/i/o0fP164/vrrmz0mMzNTiI6OFrp16+b1b9dO+7pkyRKhe/fuQmxsrNC+fXth8ODBwrZt20zZVyIn1X47131BYO03Ams/kTFY+/XD2q8/1n4yQ4QgCIJubVhEREREREREREQqRFq9A0REREREREREFL4YThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThERERERERERkWUYThH5OHnyJFwuF5588kn3fTt27EB0dDRKSkos3DMiIjIKaz8RUfhh7SeyjwhBEASrd4LIbt577z2MGjUKO3bsQHp6OjIzMzFy5EgsW7bM6l0jIiKDsPYTEYUf1n4ie2A4ReTHtGnT8OGHHyIrKwtff/01Pv/8c8TExFi9W0REZCDWfiKi8MPaT2Q9hlNEfvz000+45pprcPjwYezcuRO9evWyepeIiMhgrP1EROGHtZ/IelxzisiP/fv349ixY2hqasLBgwet3h0iIjIBaz8RUfhh7SeyHjuniCQ0NDRgwIAByMzMRHp6OlasWIGvv/4aHTt2tHrXiIjIIKz9REThh7WfyB4YThFJeOihh7Bp0yb885//RJs2bXD99dcjPj4eW7ZssXrXiIjIIKz9REThh7WfyB44rY/Ix/bt27FixQq8/vrriIuLQ2RkJF5//XX87//+L373u99ZvXtERGQA1n4iovDD2k9kH+ycIiIiIiIiIiIiy7BzioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILMNwioiIiIiIiIiILPP/AexvHakqvSixAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1400x300 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "z_mesh = U(x_mesh,y_mesh)\n",
    "z_mesh[~governing_equation_mask] = np.nan\n",
    "\n",
    "fig, axs = plt.subplots(1,3,constrained_layout=False, figsize=(14, 3))\n",
    "#\n",
    "ax = axs.ravel()[0]\n",
    "temp = uxy[0,:,:,0]\n",
    "temp[~governing_equation_mask]=np.nan\n",
    "cs = ax.contourf(x_domain, y_domain, uxy[0,:,:,0])\n",
    "fig.colorbar(cs, ax=ax, shrink=0.9)\n",
    "ax.set_xlabel('x')\n",
    "ax.set_ylabel('y')\n",
    "#\n",
    "ax = axs.ravel()[1]\n",
    "cs = ax.contourf(x_domain, y_domain, z_mesh)\n",
    "fig.colorbar(cs, ax=ax, shrink=0.9)\n",
    "ax.set_xlabel('x')\n",
    "ax.set_ylabel('y')\n",
    "#\n",
    "ax = axs.ravel()[2]\n",
    "cs = ax.contourf(x_domain, y_domain, uxy[0,:,:,0]-z_mesh)\n",
    "fig.colorbar(cs, ax=ax, shrink=0.9)\n",
    "ax.set_xlabel('x')\n",
    "ax.set_ylabel('y')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 10. Save the Process Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "picn_process_data = {'x_domain':x_domain,\n",
    "                     'y_domain':y_domain,\n",
    "                     'epoch_number_list':np.asarray(epoch_number_list),\n",
    "                     'total_loss_list':np.asarray(total_loss_list),\n",
    "                     'domain_loss_list':np.asarray(domain_loss_list),\n",
    "                     'boundary_loss_list':np.asarray(boundary_loss_list),\n",
    "                     'uxy_list':np.concatenate(uxy_list,axis=0),\n",
    "                     'dudx_list':np.concatenate(dudx_list,axis=0),\n",
    "                     'dudy_list':np.concatenate(dudy_list,axis=0),\n",
    "                     'd2udx2_list':np.concatenate(d2udx2_list,axis=0),\n",
    "                     'd2udy2_list':np.concatenate(d2udy2_list,axis=0),\n",
    "                     'd2udxdy_list':np.concatenate(d2udxdy_list,axis=0),\n",
    "                     'laplace_list':np.concatenate(laplace_list,axis=0),\n",
    "                     'governing_equation_mask':np.asarray(governing_equation_mask)}\n",
    "savemat('picn_process_data.mat', picn_process_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
